/**
**********************************************************************************************************************************************************************************************************************************
* @file:	FilePermissions.h
* @author:	zinface
* @date:	2021年09月22日 18:56:12 星期三
* @brief:	FinalC 提供的 FilePermissions 文件权限信息操作
**********************************************************************************************************************************************************************************************************************************
**/

#ifndef __FILEPERMISSIONS__H__
#define __FILEPERMISSIONS__H__

#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

#include "FinalC.h"
#include "FinalCType/String.h"

FinalC_Object_Define(FilePermissions) {
    bool isRead;
    bool isWrite;
    bool isExecute;
    struct stat st;
    String str;
};
// FinalC_Object_Size(FilePermissions);

#define FinalC_FilePermission_Func_Define(func) \
        FinalC_Object_Func_Suffix(filePermission, func)

// ------------------------------------ Constructor
FINALC_WARN_UNUSED_RESULT
FinalC_Object_Create_Define(FilePermissions);

void FinalC_FilePermission_Func_Define(Set)(FilePermissions *perm, bool isread, bool iswrite, bool isexec);
void filePermissionSetWith_stat(FilePermissions *perm, struct stat st);
void filePermissionSetWith_cstr(FilePermissions *perm, char *str);


FilePermissions *createFilePermissionWith_cstr(char *str);
// ------------------------------------ Destructor
FinalC_Object_Destroy_Define(FilePermissions);
FinalC_Object_Delete_Define(FilePermissions);

#endif  //!__FILEPERMISSIONS__H__